;http://www.daniweb.com/software-development/assembly/threads/333365/boot-loader
    BITS 16
    start:
        mov ax, 07C0h   ; Set up 4K stack space after this bootloader
        add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
        mov ss, ax
        mov sp, 4096
        mov ax, 07C0h   ; Set data segment to where we're loaded
        mov ds, ax
        mov si, text_string ; Put string position into SI
        call print_string ; Call our string-printing routine
        text_string db 'This is my cool new OS!', 0
        print_string: ; Routine: output string in SI to screen
        mov ah, 0Eh ; int 10h 'print char' function
    .repeat:
        lodsb ; Get character from string
        cmp al, 0
        je .background_colors ; If char is zero, end of string
        int 10h ; Otherwise, print it
        jmp .repeat
    .background_colors:
        mov ah,0Bh
        mov bh,0
        mov bl,02h
        int 10h
        jmp .cursor_pointer
    .cursor_pointer:
        mov ah,2h ;set the value to "ah" to move the cursor pointer
        mov bh,0 ;select page
        mov dh,22 ;set row position of the cursor
        mov dl,0 ;set column position of the cursor
        int 10h ;tell bios "hey dude now we are done,take action!!!"
        jmp .character_write
    .character_write:
        mov ah,9h
        mov al,65 ;ascii value
        mov bh,0 ;display page
        mov bl,5h ;display attribute
        mov cx,10 ;display times
        int 10h
        jmp .cursor_pointer2
    .cursor_pointer2:
        mov ah,2h ;set the value to "ah" to move the cursor pointer
        mov bh,0 ;select page
        mov dh,23 ;set row position of the cursor
        mov dl,0 ;set column position of the cursor
        int 10h ;tell bios "hey dude now we are done,take action!!!"
        jmp .character_read
    .character_read:
        mov ah,00h ;remeber set the value to "ah" now you are going to read a keyboard input
        int 16h ;this interrupt is given to control keystrokes of keyboard
        jmp .print_input ;now lets print what we took as input
    .print_input:
        mov ah,9h ;set the value to "ah" to print one character to std out
        mov bh,0 ;set page number
        mov bl,5h ;set the color attribute of the font to be print
        mov cx,10 ;set the value how many time the character in "al" should be print
        int 10h ;tell bios "hey dude now we are done,take action!!!"
        jmp .done
    .done:
        ret
        times 510-($-$$) db 0 ; fill up the rest part of the boot secotr with 0 s
        dw 0xAA55 ; The standard PC boot signature